"""
auth:xgt-python
datetime:2021/11/8
爬取京东数据商品
"""

from selenium import webdriver
import time
import csv

def search_product(keyword): # 代表商品关键字
    """搜素商品，得到搜素结果"""
    driver.find_element_by_css_selector('#key').send_keys(keyword)
    driver.find_element_by_css_selector('#search > div > div.form > button > i').click() #执行页面的点击事件


# 数据懒加载(下拉页面),30
def drop_down():
    """页面的下拉,模拟人的下拉"""
    for x in range(1,10,2):  # 1 3 5 7 9
        time.sleep(0.5)
        j = x / 9 # 分数 1/9  3/9 5/9 7/9  9/9
        # js下拉页面
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)


# 数据解析方法
def parse_data():
    """数据解析 ,数据的保存 csv保存"""
    lis = driver.find_elements_by_css_selector('.gl-item') # 所有li

    for li in lis:
        try:
            name = li.find_element_by_css_selector('div.p-name a em').text # 商品名字
            name = name.replace('京东超市','').replace('\n','')
            price = li.find_element_by_css_selector('div.p-price strong i').text + '元'  # 商品的价格
            deal = li.find_element_by_css_selector('div.p-commit strong a').text # 商品的评价数量
            title = li.find_element_by_css_selector('span.J_im_icon a').get_attribute('title') # 商品的店铺名字
            print(name,price,deal,title,sep=' | ')


            with open('京东数据.csv',mode='a',encoding='utf-8',newline='') as file:
                csv_write = csv.writer(file)
                csv_write.writerow([name,price,deal,title])
        except:
                pass

def get_next():
    """点击下一页"""
    driver.find_element_by_css_selector('#J_bottomPage > span.p-num > a.pn-next > em').click()


word = input('请输入你要输入商品的关键字:')

# 1. 创建浏览器对象
driver = webdriver.Chrome()

driver.get('https://www.jd.com/')  # 根据地址打开页面
driver.implicitly_wait(10)  # 设置浏览器的等待 智能化等待,不会死等
driver.maximize_window()  # 最大化浏览器
# driver.minimize_window()  # 最小化浏览器


# 调用搜素商品的方法
search_product(word)

for page in range(100):
    # 调用页面下拉的方法
    drop_down()
    # 调用数据解析方法
    parse_data()
    # 调用下一页点击方法
    get_next()

"""打开的浏览器,你要执行那些浏览器的操作<代码>，就和你平常操作浏览器的顺序一样"""






